/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package documentadorrepositorio.artefatos;

import documentadorrepositorio.exportacaoAdapterTexto.FonteTexto;
import documentadorrepositorio.exportacaoAdapterTexto.IExportacaoTexto;
import documentadorrepositorio.util.IOUtil;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author André
 */
public abstract class Artefato {

    private Date dataCommit;
    private Integer review;
    private ByteArrayOutputStream bytesArtefato;
    public String caminhoArtefato;
    protected boolean isImagem;
    private List<Artefato> artefatos = new ArrayList<>();

    public Artefato(String siglaArtefato, String tipoArtefato) {
        this.siglaArtefato = siglaArtefato;
        this.tipo = tipoArtefato;
    }

    public ByteArrayOutputStream getBytesArtefato() {
        return bytesArtefato;
    }

    public void setBytesArtefato(ByteArrayOutputStream bytesArtefato) {
        this.bytesArtefato = bytesArtefato;
    }

    public Integer getReview() {
        return review;
    }

    public Date getDataCommit() {
        return dataCommit;
    }

    public void setDataCommit(Date dataCommit) {
        this.dataCommit = dataCommit;
    }

    public void setReview(Integer review) {
        this.review = review;
    }

    public String getCaminhoArtefato() {
        return caminhoArtefato;
    }

    public String getSiglaArtefato() {
        return siglaArtefato;
    }

    public String getDadosArtefato() {
        return dadosArtefato;
    }

    public String getNomeArtefato() {
        return nomeArtefato;
    }

    public Integer getNumeroArtefato() {
        return numeroArtefato;
    }

    public void setDadosArtefato(String dadosArtefato) {
        this.dadosArtefato = dadosArtefato;
    }

    public void setNomeArtefato(String nomeArtefato) {
        this.nomeArtefato = nomeArtefato;
    }

    public void setNumeroArtefato(Integer numeroArtefato) {
        this.numeroArtefato = numeroArtefato;
    }

    public void setCaminhoArtefato(String caminhoArtefato) {
        this.caminhoArtefato = caminhoArtefato;
    }

    public String getTipo() {
        return tipo;
    }

    public void setSiglaArtefato(String siglaArtefato) {
        this.siglaArtefato = siglaArtefato;
    }
    private String nomeArtefato;
    private String dadosArtefato;
    private Integer numeroArtefato;
    private String siglaArtefato;
    private String tipo;

    @Override
    public String toString() {
        if (nomeArtefato != null && !nomeArtefato.isEmpty()) {
            return siglaArtefato.toUpperCase() + numeroArtefato + " - " + nomeArtefato;
        } else {
            return siglaArtefato.toUpperCase() + numeroArtefato;
        }
    }

    public boolean isImagem() {
        return isImagem;
    }

    public void setImagem(boolean tipo) {
        this.isImagem = tipo;
    }

    public boolean isIsImagem() {
        return isImagem;
    }

    public void setIsImagem(boolean isImagem) {
        this.isImagem = isImagem;
    }

    public List<Artefato> getArtefatos() {
        return artefatos;
    }

    public void setArtefatos(List<Artefato> artefatos) {
        this.artefatos = artefatos;
    }

    public void insereDescricao(IExportacaoTexto mecanismoExportacao, FonteTexto fontePadrao, FonteTexto fonteSubTitulo, FonteTexto fonteTitulo) throws Exception {
        if (!isImagem) {
            mecanismoExportacao.setFonteTexto(fonteSubTitulo);
            mecanismoExportacao.insereTexto(toString() + "\r\n");
            mecanismoExportacao.setFonteTexto(fontePadrao);
            mecanismoExportacao.insereTexto(IOUtil.obtemString(getBytesArtefato().toByteArray()) + "\r\n\r\n");
        } else {
            mecanismoExportacao.setFonteTexto(fonteSubTitulo);
            mecanismoExportacao.insereTexto("\r\n\r\n" + toString());

            mecanismoExportacao.insereImagem(getBytesArtefato().toByteArray());
            //mecanismoExportacao.a
            mecanismoExportacao.iniciaParagrafo();
            //mecanismoExportacao.insereTexto("\r\n");
        }
    }

    public abstract String nomePlural();

    public abstract boolean isRastreabilidade();
}
